package com.tedu.review.day02;
/*
super关键字--一定存在继承
super代表父类的引用 通过引用调用父类的属性以及方法
语法：子类出现 super.属性
     super.方法
     super（）调用父类的构造器
  this代表调用“当前对象"的引用，针对了，不针对继承
  调法this.属性  用法：方法，构造器，肯定有参数
                 this.属性，肯定是当前类的属性名
                 针对赋值 this.name=name
                 类中属性=传入参数
                 当前类的属性重新赋值
                 this.方法 用法：调用本类的其他方法
 */
class Animal{
    String name="动物";
    public void say(){
        System.out.println(name+"语言");
    }
    //构造器：无参数

    public Animal() {
        this("1");//无参构造器调用有参构造器
        System.out.println("我是父类---构造器");
    }

    public Animal(String name) {
        this.name = name;
        System.out.println("我是父类---构造器---有参");
    }
}
class Dog extends Animal{
    //针对有参构造器和无参构造器
    public Dog() {
        //默认super（）---自动调用父类构造器
        super("有参");
        System.out.println("Dog...");
    }


    public void say(){
        System.out.println("汪汪");
        this.sayTest();//当前类的其他方法
    }
    public void sayTest(){
        //测试：调用父类的属性、方法、构造器
        System.out.println("测试");
       // super.say();
        //System.out.println(super.name+"哺乳动物");
    }
}
public class super关键字使用 {
    public static void main(String[] args) {
        Dog dog=new Dog();//1.调用构造器：先super调用父类的有参构造器
                          //2.然后调用子类的无参构造器内容
       // dog.sayTest();//3.执行方法：发现super调用父类的方法
                      //4.1然后调用子类的方法，发现调用父类的属性
                      //4.2.最后子类的输出语句
//dog.say();
        //测试：Animal动物类 this（）调用本类构造器
        Animal a=new Animal();
    }
}
/**
 * this与super关键字有区别?
 * this 调用本类的属性和方法以及构造器
 * super 调用父类的属性和方法以及构造器
 *
 * this(参数)可调取本类的其他构造器(构造器第一行)
 * super(参数)调取父类的其他构造器(构造器第一行)
 *            有继承关系，在子类构造器中默认存在super()
 */